using SqlSugar;

namespace ClassDemo.Model.Entity;

/// <summary>
/// 学生实体类
/// </summary>
/// <remarks>
/// 表示系统中的学生用户，包含学籍信息、基本信息和认证相关字段
/// 对应数据库表：Student
/// </remarks>
[SugarTable("Student")]
public class Student
{
    /// <summary>
    /// 学生唯一标识符
    /// </summary>
    /// <value>
    /// 数据库自增主键，用于唯一标识每个学生记录
    /// </value>
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "StudentID")]
    public Int32 Id { get; set; }
    
    /// <summary>
    /// 学号
    /// </summary>
    /// <value>
    /// 学生的学号，用于学籍管理和登录认证，必须唯一
    /// 格式：通常为年份+序号，如 2024001
    /// </value>
    [SugarColumn(ColumnName = "StudentNo")]
    public String No { get; set; }
    
    /// <summary>
    /// 学生姓名
    /// </summary>
    /// <value>
    /// 学生的真实姓名，用于显示和识别
    /// </value>
    public String Name { get; set; }
    
    /// <summary>
    /// 登录密码
    /// </summary>
    /// <value>
    /// 经过哈希加密的密码，用于身份验证
    /// 存储格式：Base64编码的哈希值
    /// </value>
    public String Password { get; set; }
    
    /// <summary>
    /// 手机号码
    /// </summary>
    /// <value>
    /// 学生的手机号，可用于登录认证和联系方式
    /// 格式：11位数字，如 13800138001
    /// </value>
    public String Mobile { get; set; }
    
    /// <summary>
    /// 年级
    /// </summary>
    /// <value>
    /// 学生所在年级，如 2024级
    /// </value>
    public String Grade { get; set; }
    
    /// <summary>
    /// 专业
    /// </summary>
    /// <value>
    /// 学生所学专业名称，如 计算机科学与技术
    /// </value>
    public String Major { get; set; }
    
    /// <summary>
    /// 班级
    /// </summary>
    /// <value>
    /// 学生所在班级，如 计算机科学与技术1班
    /// </value>
    public String Class { get; set; }
    
    /// <summary>
    /// 性别
    /// </summary>
    /// <value>
    /// 学生性别，通常为 男 或 女
    /// </value>
    public String Sex  { get; set; }

    /// <summary>
    /// 记录创建时间
    /// </summary>
    /// <value>
    /// 学生账号首次创建的时间戳
    /// </value>
    public DateTime CreateTime { get; set; }

    /// <summary>
    /// 记录最后更新时间
    /// </summary>
    /// <value>
    /// 学生信息最后一次修改的时间戳
    /// </value>
    public DateTime UpdateTime { get; set; }
}